#ifndef DATASTRUCTURE_STACK_H
#define DATASTRUCTURE_STACK_H

typedef char ElemType;

/**
 * 栈 链表实现
 */
typedef struct LinkNode {
    ElemType data;
    // 直接前驱节点
    struct LinkNode *prev;
    // 直接后继节点
    struct LinkNode *next;
} Stack;

Stack *createStack(ElemType e);

int verificationStack(Stack *stack);

// 初始化栈
Stack *initStack();

// 压栈
int push(Stack *stack, ElemType e);

// 弹栈
ElemType pop(Stack *stack);

// 获取栈顶元素
ElemType getTop(Stack *stack);

// 输出栈
void showStack(Stack *stack);

// 栈长度
int stackLength(Stack *stack);

// 判断栈是否为空
int isEmptyStack(Stack *stack);

// 释放内存
void deleteStack(Stack *stack);

void stackTest();

#endif //DATASTRUCTURE_STACK_H
